"""
实现一个脚本，用户指定一个文件夹，比如叫data，要求将data内所有的文件备份到用户指定的新文件夹中，如用户未指定备份的目录。
则默认备份到当前目录下，生成的备份目录的命名规则：在原目录名字后面加上当前的日期，
比如data文件夹于2020年1月1日执行了备份，则备份出来的文件夹就是data_20200101。注意，文件的格式包括文本文件和图片。
"""
from datetime import  datetime
import os
import shutil
class BackupFile:
    def __init__(self, sourse_path):
        self.sourse_path = sourse_path
        # 获取现在的时间
        self.now_time = datetime.now().strftime('%Y%m%d')
        # 获取数据源文件夹的绝对路径
        self.abs_path = os.path.abspath(self.sourse_path)
        self.target_path = input("请输入指定文件夹及路径:")
        self.check_target_path(self.target_path)

    def check_target_path(self, target_path):
        # 检查是否有目标文件夹
        if target_path == "":
            # 如果没有指定文件夹, 则保存到本地
            self.save_local()
        else:
            # 有指定文件夹, 保存到指定文件夹
            self.save_to_target(self.target_path)

    def save_local(self):
        # 拼接路径和时间成新文件夹的名字
        new_file_name = self.abs_path + self.now_time
        # 判断文件夹是否已经存在
        if  os.path.exists(new_file_name):
            print('文件已存在')
        #不存在则创建一个
        else:
            print('文件不存在')
            os.makedirs(new_file_name)
        # 备份到新文件夹
        self.copy_file(new_file_name)

    def save_to_target(self,target_path):
        # 备份到指定目录
        self.copy_file(target_path)

    def copy_file(self,desc_path):
        list_file = os.listdir(self.abs_path)
        for file_name in list_file:
            print(file_name)
            file_path = self.abs_path + '\\' + file_name
            print(file_path)
            shutil.copy(file_path, desc_path+'\\')

if __name__ == '__main__':
    # 调用方法: BackupFile('指定需要备份的文件夹')
    backup_task  = BackupFile('data')



